#include <plugins_manager/qls_plugins_manager_pool.h>
#include <plugins_manager/qls_plugins_manager.h>

/* static */
QMutex QLsPluginsManagerPool::m_instanceMutex;
QLsPluginsManagerPool *QLsPluginsManagerPool::m_instance = nullptr;

QLsPluginsManagerPool::QLsPluginsManagerPool(QObject *parent) : QObject(parent)
{
}

/* 唯一实例 */
QLsPluginsManagerPool &QLsPluginsManagerPool::GetInstance()
{
    if (!m_instance) {
        QMutexLocker locker(&m_instanceMutex);
        if (!m_instance)
            m_instance = new QLsPluginsManagerPool;
    }
    return *m_instance;
}

/* 当前存在的 插件管理器 列表 */
QList<QLsPluginsManager *> QLsPluginsManagerPool::getPluginsManagerList() const
{
    return m_pluginsManagerList;
}

/* 获取插件管理器 */
QLsPluginsManager *QLsPluginsManagerPool::GetPluginsManagerByPluginsDir(
    const QString &pluginsDir)
{
    /* 查找现有的插件管理器 */
    for (QLsPluginsManager *pluginsManager : m_pluginsManagerList) {
        if (pluginsManager->pluginsDir() == pluginsDir)
            return pluginsManager;
    }

    /* 没有则创建一个 */
    QLsPluginsManager *pluginsManager = new QLsPluginsManager(pluginsDir);
    m_pluginsManagerList.append(pluginsManager);
    return pluginsManager;
}

/* 销毁插件管理器 */
void QLsPluginsManagerPool::DestroyPluginsManager(
    QLsPluginsManager *pluginsManager)
{
    m_pluginsManagerList.removeOne(pluginsManager);
    delete pluginsManager;
}
